<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Bytecode</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Bytecode"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Bytecode rootpage-Bytecode skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Bytecode</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Bytecode</b> ist in der <a href="Informatik" title="Informatik">Informatik</a> die Bezeichnung für eine Sammlung von <a href="Befehlssatz" title="Befehlssatz">Befehlen</a>, also die Maschinensprache für eine <a href="Virtuelle_Maschine" title="Virtuelle Maschine">virtuelle Maschine</a>. Bytecode bezeichnet sowohl die Vorschrift wie der Quellcode von Programmen in diesen Objektcode zu kodieren ist, als auch die Ergebnisse dieser Kodierung, also die ausführbaren Programme. Bytecode ist im Gegensatz zu <a href="Quelltext" title="Quelltext">Quelltexten</a> oder <a href="Skriptsprache" title="Skriptsprache">Skripten</a> nicht „menschenlesbar“, Programmanweisungen und Werte sind wie in <a href="Maschinensprache" title="Maschinensprache">Maschinencode</a> als Bytes codiert. Maschinencode wird jedoch direkt von einem (Hardware) <a href="Prozessor" title="Prozessor">Prozessor</a> ausgeführt, Bytecode dagegen betont, dass das Programm zunächst von einem speziellen anderen Programm „<a href="Interpreter" title="Interpreter">interpretiert</a>“, in Maschinencode übersetzt wird. Ein Bytecode kann jedoch von passenden Hardware-Prozessoren direkt ausgeführt werden, und Maschinencode wird meist, sozusagen als Bytecode, auf Software-Prozessoren entwickelt.
</p><p>Bei <a href="Compiler" title="Compiler">Kompilierung</a> eines Quelltextes mancher <a href="Programmiersprache" title="Programmiersprache">Programmiersprachen</a> oder Umgebungen – wie beispielsweise <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> – wird nicht direkt Maschinencode, sondern ein <a href="Zwischencode" title="Zwischencode">Zwischencode</a>, der Bytecode, erstellt.<sup id="cite_ref-itwissen_1-0" class="reference"><a href="#cite_note-itwissen-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Dieser Code ist in der Regel unabhängig von realer <a href="Hardware" title="Hardware">Hardware</a>. Er entsteht als Resultat einer semantischen Analyse des Quelltexts und ist im Vergleich zu diesem deutlich kompakter und zumeist wesentlich effizienter interpretierbar als der originale Quelltext.
</p>
<div class="mw-heading mw-heading2"><h2 id="Technische_Details">Technische Details</h2></div>
<p>Die virtuelle Maschine – im Fall von Java die <a href="Java_Virtual_Machine" title="Java Virtual Machine">Java Virtual Machine</a> (JVM) – führt dann dieses Zwischenergebnis aus, indem sie zur <a href="Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> den Bytecode entweder in Maschinensprache für den jeweiligen <a href="Prozessor" title="Prozessor">Prozessor</a> übersetzt (<a href="Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">Just-in-time-Kompilierung</a>) oder entsprechende Maschinencode-Routinen ausführt (<a href="Interpreter" title="Interpreter">Interpreter</a>). Dabei muss die virtuelle Maschine für jede Rechnerplattform, auf der das Kompilat ausgeführt werden soll, vorhanden sein.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Java ist nur eines der prominenteren Beispiele für eine Bytecode-basierte Programmiersprache. Andere Sprachen, die Bytecodes verwenden, sind etwa <a href="UCSD_Pascal" title="UCSD Pascal">UCSD Pascal</a>, <a href="Lua" title="Lua">Lua</a>, die <a href=".Net-Framework" title=".Net-Framework">.Net-Framework</a>-Sprachen <a href="C-Sharp" title="C-Sharp">C#</a>, <a href="F-Sharp" title="F-Sharp">F#</a> und <a href="Visual_Basic_.NET" title="Visual Basic .NET">Visual Basic</a>, <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a>, <a href="Ruby_(Programmiersprache)" title="Ruby (Programmiersprache)">Ruby</a>, <a href="Perl_(Programmiersprache)" title="Perl (Programmiersprache)">Perl</a>, <a href="PHP" title="PHP">PHP</a>, <a href="Prolog_(Programmiersprache)" title="Prolog (Programmiersprache)">Prolog</a>, <a href="Limbo_(Programmiersprache)" title="Limbo (Programmiersprache)">Limbo</a>, <a href="Gambas_(Programmiersprache)" title="Gambas (Programmiersprache)">Gambas</a> sowie <a href="Tcl" title="Tcl">Tcl</a>.<sup id="cite_ref-itwissen_1-1" class="reference"><a href="#cite_note-itwissen-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Während bei Java, Python und .NET der Bytecode als „Kompilat“ gespeichert und dann unabhängig vom Quellcode ausgeführt wird, wird bei den <a href="Skriptsprache" title="Skriptsprache">Skriptsprachen</a> Perl (bis Version 5) und Tcl beim Programmstart der Quellcode in Bytecode übersetzt und nur im Arbeitsspeicher vorgehalten.
</p><p>Die Verwendung von Bytecode macht es möglich, dieselbe virtuelle Maschine für mehrere Sprachen zu verwenden, beispielsweise die JVM für Java, <a href="Scala_(Programmiersprache)" title="Scala (Programmiersprache)">Scala</a>, <a href="Groovy" title="Groovy">Groovy</a> und viele andere. Der Aufwand, nur einen Bytecode-Compiler für eine <a href="H%C3%B6here_Programmiersprache" title="Höhere Programmiersprache">höhere Programmiersprache</a> zu entwickeln, ist dann deutlich reduziert. Dagegen wäre der Aufwand, wenn ein Compiler eine direkte Übersetzung in Maschinencode für mehrere Betriebssysteme und Architekturen bereitstellen soll, sehr viel höher. Ein Bytecode kann auch unabhängig von einer speziellen Sprache für einen bestimmten Einsatzzweck entwickelt worden sein, zum Beispiel <a href="WebAssembly" title="WebAssembly">WebAssembly</a>.
</p><p>Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, geht auf Kosten von dessen Startzeit, welche im Allgemeinen aber eher nur messbar als wahrnehmbar beeinträchtigt wird. Spezielle <a href="Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">Just-in-time-Compiler</a> (JIT-Compiler) übersetzen Bytecode-Stücke einmal während der Programmausführung in entsprechende Maschinencodestücke und führen diese dann aus. Dadurch lassen sich die Ausführungszeiten, jedoch nicht die Startzeiten, oft in den Bereich von vorübersetztem Maschinencode reduzieren.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Hintergründe"><span id="Hintergr.C3.BCnde"></span>Hintergründe</h2></div>
<p>Viele interpretierte Sprachen verwenden auch intern Bytecode. Das bedeutet, dass der Bytecode an sich unsichtbar für den Programmierer und Endbenutzer gehalten wird und automatisch als Zwischenschritt der Interpretation des Programmes erzeugt wird. Beispiele für aktuelle Sprachen, die diese Technik verwenden, sind: Perl, PHP, Prolog, Tcl und Python. In Python wird der Bytecode nach dem ersten Parsen in .pyc-Dateien (welche den Bytecode enthalten) abgelegt; das Vorgehen ähnelt damit prinzipiell dem bei Java. Dieser Schritt ist jedoch optional.
</p><p>Auch dieses Verfahren ist sehr alt: Bereits für <a href="Lisp" title="Lisp">Lisp</a> wurde in den 1960er Jahren Bytecompiling eingesetzt: Die 256 <a href="Lispatom" class="mw-redirect" title="Lispatom">atomaren</a> Funktionen wurden in einem Byte kodiert. Frühe <a href="BASIC" title="BASIC">BASIC</a>-Versionen der 1970er und 1980er Jahre verwendeten anstelle der Schlüsselwörter bestimmte Byte-Werte, sogenannte <a href="Token_(%C3%9Cbersetzerbau)" title="Token (Übersetzerbau)">Tokens</a>, um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text – zum Beispiel Variablen, mathematische Ausdrücke und Zeichenketten – wurde jedoch unverändert gespeichert. Bei Ausgabe durch den LIST-Befehl wurden die Tokens wieder in lesbare Schlüsselwörter umgewandelt. Ein bekannter früher <a href="Heimcomputer" title="Heimcomputer">Heimcomputer</a>, der Bytecode verwendet, ist der <a href="Texas_Instruments_TI-99/4A" title="Texas Instruments TI-99/4A">TI 99/4a</a> von <a href="Texas_Instruments" title="Texas Instruments">Texas Instruments</a>.
</p><p>Aufgrund des stark begrenzten Speicherplatzes der ersten Homecomputer war es unumgänglich, beispielsweise BASIC-Programme als Bytecode in den <a href="Random-Access_Memory" title="Random-Access Memory">RAM</a> zu überführen. Alternativ konnte man nur mit direkt eingegebenen Maschinencode programmieren. Reiner Text wäre sehr schnell an die Speichergrenze gestoßen. Die Platzersparnis von Quelltexten in Bytecodeform war aber auch später noch angesichts langsamer und begrenzter Massenspeicher von Vorteil. Hinzu kommt der große Vorteil, dass Bytecode deutlich schneller ausgeführt werden kann als ein normaler Quelltext. Statt jeden Buchstaben eines Befehls zu vergleichen, um erst mal herauszufinden, um welchen Befehl es sich handelt, muss man nur ein oder wenige Bytes vergleichen, die diesen repräsentieren.
</p>
<div class="mw-heading mw-heading2"><h2 id="Rückgewinnung_von_Quelltext_aus_Kompilaten"><span id="R.C3.BCckgewinnung_von_Quelltext_aus_Kompilaten"></span>Rückgewinnung von Quelltext aus Kompilaten</h2></div>
<p>Für Programmierer, die an Programmen arbeiten, deren Quellcode nicht offengelegt werden soll, gibt es einen wichtigen Aspekt zu beachten: Bei Programmiersprachen, wie beispielsweise <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, die direkt zu Maschinencode kompiliert werden, ist es normalerweise nicht möglich, aus dem Maschinencode den ursprünglichen Quellcode zurückzugewinnen.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Dazu müssten mindestens die Algorithmen des verwendeten Compilers bekannt sein. Funktionsbezeichner und Variablennamen können allerdings nur dann ermittelt werden, wenn dem Compilat Daten für einen <a href="Debugger" title="Debugger">Debugger</a> hinzugefügt wurden.
</p><p>Bei Kompilierung zu Bytecode ist dieses sogenannte <a href="Decompiler" title="Decompiler">Dekompilieren</a> hingegen viel einfacher, da dieser sich weniger an der abstrakten Maschinensprache orientiert, sondern meistens deutlich näher an der zugrundeliegenden Programmiersprache liegt. Hierbei kann zwar nicht der exakte Quellcode rekonstruiert werden, allerdings ist es häufig möglich, zumindest äquivalenten Code in der Quellsprache zurückzugewinnen, teilweise mit verblüffenden Ähnlichkeiten. Beispielsweise bei Java und .NET ist dies in den meisten Fällen sehr gut möglich; in Prolog mit <a href="Warren%E2%80%99s_Abstract_Machine" title="Warren’s Abstract Machine">WAM</a>-Bytecode ist eine Rückgewinnung immer möglich;<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p><p>Mithilfe eines sogenannten <a href="Obfuskation_(Software)" title="Obfuskation (Software)">Obfuskators</a> kann die Nutzbarkeit des durch das Dekompilieren erhaltenen Quelltextes sehr stark eingeschränkt werden. Mitunter werden Befehlsfolgen eingebaut, die in der Quellsprache nicht existieren (beispielsweise Code nach Ende einer Methode), was ein Dekompilieren in die Quellsprache gar nicht mehr möglich macht.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li>Bill Venners: <style data-mw-deduplicate="TemplateStyles:r261891140">
/* start https://de.wikipedia.org/ */
.mw-parser-output .webarchiv-memento a{color:inherit}
/* end https://de.wikipedia.org/ */
</style><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160306052502/http://www.javaworld.com/article/2077233/core-java/bytecode-basics.html">Bytecode basics. A first look at the bytecodes of the Java virtual machine</a> (<span class="webarchiv-memento"><a href="Webarchivierung#Begrifflichkeiten" title="Webarchivierung">Memento</a></span> vom 6. März 2016 im <i><a href="Internet_Archive" title="Internet Archive">Internet Archive</a></i>) in javaworld.com vom 1. September 1996 (englisch) – Java-Bytecode entschlüsselt</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-itwissen-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-itwissen_1-0">a</a></sup> <sup><a href="#cite_ref-itwissen_1-1">b</a></sup></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://www.itwissen.info/Bytecode-bytecode.html"><i>Bytecode.</i></a> In: <i>itwissen.info.</i> 2. November 2013,<span class="Abrufdatum"> abgerufen am 19. Oktober 2018</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABytecode&rft.title=Bytecode&rft.description=Bytecode&rft.identifier=https%3A%2F%2Fwww.itwissen.info%2FBytecode-bytecode.html&rft.date=2013-11-02"> </span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://techterms.com/definition/bytecode"><i>Bytecode.</i></a> In: <i>techterms.com.</i> 23. Januar 2018,<span class="Abrufdatum"> abgerufen am 19. Oktober 2018</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABytecode&rft.title=Bytecode&rft.description=Bytecode&rft.identifier=https%3A%2F%2Ftechterms.com%2Fdefinition%2Fbytecode&rft.date=2018-01-23&rft.language=en"> </span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><span class="cite">Carles Mateo: <a rel="nofollow" class="external text" href="https://blog.carlesmateo.com/2014/10/13/performance-of-several-languages/"><i>Performance of several languages.</i></a> In: <i>carlesmateo.com.</i> 26. März 2017,<span class="Abrufdatum"> abgerufen am 8. April 2021</span> (englisch, Blogeintrag).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABytecode&rft.title=Performance+of+several+languages&rft.description=Performance+of+several+languages&rft.identifier=https%3A%2F%2Fblog.carlesmateo.com%2F2014%2F10%2F13%2Fperformance-of-several-languages%2F&rft.creator=Carles+Mateo&rft.date=2017-03-26&rft.language=en"> </span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://whatis.techtarget.com/definition/bytecode"><i>What Is: bytecode.</i></a> In: <i>techtarget.com.</i> September 2005,<span class="Abrufdatum"> abgerufen am 19. Oktober 2018</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABytecode&rft.title=What+Is%3A+bytecode&rft.description=What+Is%3A+bytecode&rft.identifier=https%3A%2F%2Fwhatis.techtarget.com%2Fdefinition%2Fbytecode&rft.date=2005-09&rft.language=en"> </span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140328021346/http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf"><i>CS1Bh Lecture Note 7 Compilation I: Java Byte Code.</i></a> (PDF) In: <i>ac.uk.</i> 6. Februar 2003, <span style="white-space:nowrap;">S. 5</span>, archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */
.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}
/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fwww.dcs.ed.ac.uk%2Fteaching%2Fcs1%2FCS1%2FBh%2FNotes%2FJavaByteCode.pdf">Original</a></span> am <span style="white-space:nowrap;">28. März 2014</span><span>;</span><span class="Abrufdatum"> abgerufen am 19. Oktober 2018</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3ABytecode&rft.title=CS1Bh+Lecture+Note+7+Compilation+I%3A+Java+Byte+Code&rft.description=CS1Bh+Lecture+Note+7+Compilation+I%3A+Java+Byte+Code&rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20140328021346%2Fhttp%3A%2F%2Fwww.dcs.ed.ac.uk%2Fteaching%2Fcs1%2FCS1%2FBh%2FNotes%2FJavaByteCode.pdf&rft.date=2003-02-06&rft.source=http://www.dcs.ed.ac.uk/teaching/cs1/CS1/Bh/Notes/JavaByteCode.pdf&rft.language=en"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-09-30" href="https://de.wikipedia.org/wiki/?title=Bytecode&oldid=260197729">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>